<?php
namespace app\common\model;
/**
 * 基本模型
 * @author Yel 
 * @copyright  yel  2019/6/26
 */

use think\Model;

class BaseModel extends Model{

	/**
	 * (最基础的增删改查操作)添加单挑数据
	 * @author Yel 2019/6/26
	 * @param  $data   array     数据
	 * @param  $isKey  bool      是否返回自增ID
	 * @param  $idName string    ID字段名
	 * @return         bool|int  
	 */
	public function addData($data,$isKey = false,$idName = 'id'){
		$this->data($data);
		$op = $this->save();
		if($op){
			if($isKey){
				return $this->$idName;
			}
			return $op;
		}
		return false;
	}


	/**
	 * (最基础的增删改查操作)简单查询全部数据
	 * @author Yel 2019/6/26
	 * @param   $where string         条件 默认 []
	 * @param   $field string         输出 默认 '*'
	 * @param   $order string|array   排序 默认 array   string:'sort desc,id desc'
	 * @param   $group string         分组显示 
	 * @return         array
	 */
	public function selectData($where = [],$field = "*",$order = [],$group = ''){
		$result = $this->field($field)->where($where)->order($order)->group($group)->select();
		if($result){
			foreach ($result as $key => $value) {
				$result[$key] = $value->toArray();
			}
			return $result;
		}
		return [];
	}

	/**
	 * (最基础的增删改查操作)简单查询一条数据
	 * @author Yel 2019/6/27
	 * @param   $where string         条件   默认 []:如果$where 只传一个数字，则默认传的是ID
	 * @param   $field string         输出   默认 '*'
	 * @return         array
	 */
	public function findData($where = [],$field = "*"){
		//没有条件传回[]
		if(empty($where)){
			return [];
		}
		//如果$where 只传一个数字，则默认传的是ID
		if(is_numeric($where)){
			$where = ['id'=>$where];
		}
		$result = $this->field($field)->where($where)->find();
		if($result){
			$result = $result->toArray();
			return $result;
		}
		return [];
	}

	/**
	 * (最基础的增删改查操作)删除数据(支持单条或者多条)
	 * @author Yel 2019/6/27
	 * @param   $where array         条件   默认 []:如果$where 只传一个数字，则默认传的是ID
	 * @return         boolean|int
	 */
	public function deleteData($where = []){
		//没有传参数：这是危险操作
		if(empty($where)){
			return false;//
		}
		//如果$where 只传一个数字，则默认传的是ID
		if(is_numeric($where)){
			$where = ['id'=>$where];
		}else if(is_string($where)){
			$where = ['id' =>['in',$where]];
		}
		//返回执行条数
		$result = $this->where($where)->delete();
		if($result){
			return $result;
		}
		return false;
	}

	/**
	 * (最基础的增删改查操作)批量修改数据
	 * @author Yel 2019/6/27
	 * @param  $list array  批量修改的数据 （data里面必须存在主键字段）
	 *         $list = [
	 *         		['id'=>$id,name=>$name],
	 *         		['id'=>$id,name=>$name],
	 *         		['id'=>$id,name=>$name]
	 *         ]
	 * @return         boolean|int
	 */
	public function saveAllData($list = []){
		//没有传参数
		if(empty($list)){
			return false;//
		}
		//返回执行条数
		$result = $this->saveAll($list);
		if($result){
			return $result;
		}
		return false;
	}

	/**
	 * (最基础的增删改查操作)修改数据
	 * @author Yel 2019/6/27
	 * @param  $id  array  
	 * @param  $list array  
	 *         $list = [
	 * 				'name'=>$name
	 * 			]
	 * @return         boolean|int
	 */
	public function saveData($list = [],$id = []){
		//没有传参数
		if(empty($list) || empty($id)){
			return false;//
		}
		//返回执行条数
		$result = $this->save($list,$id);
		if($result){
			return $result;
		}
		return false;
	}

	/**
	 * 模型实现分页基本方法
	 * @author Yel 2019/6/28
	 * @param   array         $where  条件：默认：[]
	 * @param   array         $limit  每页限制条数:默认20
	 * @param   int|boolean   $tag    当$tag 为int：总条数   boolean:是否开启简单分页
	 * @param   string        $field  限制字段
	 * @param   string        $order  排序字段
	 * @param   string        $group  分组字段：不能为空字符串 
	 * @return  array 
	 */
	public function pageData($where = [], $limit = 10 ,$tag = false,$field = '*',$order = 'id desc',$group = null){
		$list = $this->field($field)->where($where)->order($order)->group($group)->paginate($limit,$tag);
		//数据组合
		$data = [
			'data' => $list,
			'page' => $list->render()
		];
		return $data;
	}
}